package com.yj.springbootfastdfs.aliyun;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import com.yj.springbootfastdfs.entity.Info;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

@RestController
@RequestMapping("aliyun")
@Slf4j
public class AliYunController {


    @Resource
    private AliYunConfig aliYunConfig;

    @PostMapping("upload")
    public String uploadFile(MultipartFile file, Info info) throws Exception {


        log.info("file name = {}", file.getName());
        log.info("file name = {}", file.getOriginalFilename());
        log.info("file name = {}", file.getInputStream());
        log.info("info = {}", info);

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(aliYunConfig.getEndpoint(), aliYunConfig.getAccessKeyId(), aliYunConfig.getAccessKeySecret());

// 填写本地文件的完整路径。如果未指定本地路径，则默认从示例程序所属项目对应本地路径中上传文件流。
//        InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt");
        InputStream inputStream = file.getInputStream();
        // 依次填写Bucket名称（例如examplebucket）和Object完整路径（例如exampledir/exampleobject.txt）。Object完整路径中不能包含Bucket名称。
        PutObjectResult putObjectResult = ossClient.putObject(aliYunConfig.getBucketName(), "demo01/" + file.getOriginalFilename(), inputStream);

        // 关闭OSSClient。
        ossClient.shutdown();

        return aliYunConfig.getHost()  + "/" + aliYunConfig.getObjectName() + "/" + file.getOriginalFilename();
    }


    @GetMapping("download")
    public String download(String fileName) {


// 填写不包含Bucket名称在内的Object完整路径，例如testfolder/exampleobject.txt。
        String objectName = "demo01/" + fileName;

// 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(aliYunConfig.getEndpoint(), aliYunConfig.getAccessKeyId(), aliYunConfig.getAccessKeySecret());

// 下载Object到本地文件，并保存到指定的本地路径中。如果指定的本地文件存在会覆盖，不存在则新建。
// 如果未指定本地路径，则下载后的文件默认保存到示例程序所属项目对应本地路径中。
        ObjectMetadata object = ossClient.getObject(new GetObjectRequest(aliYunConfig.getBucketName(), objectName), new File("D:/demo/" + fileName));


// 关闭OSSClient。
        ossClient.shutdown();


        return "success";
    }

}
